﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Diagnostics;

namespace CochinitaCorte//.CochinitaCorteData
{
    public class PrinterManager
    {
        private string text = "";
       // private string Texto = "";
        private string parte1, parte2;
        private int maxCharacters, cortCharacters;
		private string printerName;
        private const int MAX_CHAR = 34;

        public PrinterManager(string printerName)
		{
			this.printerName = printerName;
		}

        public void LineasGuion()
        {
            for (int x = 0; x <= MAX_CHAR; x++)
                text += "-";
            
            text += "\n";   
            //RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasAsterisco()
        {
            for (int x = 0; x <= MAX_CHAR; x++)
                text += "*";

            text += "\n"; 
             // RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasIgual()
        {
            for (int x = 0; x <= MAX_CHAR; x++)
                text += "=";

            text += "\n"; 
          //  RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void LineasTotales()
        {
            text = "                             -----------\n"; ;   // agrega lineas de total
            RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime linea
        }
        public void EncabezadoVenta(string texto)
        {
            text += texto;
            //RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoIzquierda(string par1)                          // agrega texto a la izquierda
        {
            //maxCharacters = par1.Length;
            //if (maxCharacters > MAX_CHAR)                                 // **********
            //{
            //    cortCharacters = maxCharacters - MAX_CHAR;
            //    parte1 = par1.Remove(MAX_CHAR, cortCharacters);        // si es mayor que 40 caracteres, lo corta
            //}
            //else { parte1 = par1; }                      // **********
            text += par1 + "\n";
           
            
            // RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoDerecha(string par1)
        {
           // text = "";
            maxCharacters = par1.Length;
            if (maxCharacters > MAX_CHAR)                                 // **********
            {
                cortCharacters = maxCharacters - MAX_CHAR;
                parte1 = par1.Remove(MAX_CHAR, cortCharacters);           // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            maxCharacters = MAX_CHAR - par1.Length;                     // obtiene la cantidad de espacios para llegar a 40
            for (int i = 0; i < maxCharacters; i++)
            {
                text += " ";                          // agrega espacios para alinear a la derecha
            }
            text += parte1 + "\n";                    //Agrega el texto
           // RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void SaltoDeLinea()
        {
            RawPrinterHelper.SendStringToPrinter(printerName, "\n");
        }
        public void TextoCentro(string par1)
        {
           // text = "";
            maxCharacters = par1.Length;
            if (maxCharacters > MAX_CHAR)                                 // **********
            {
                cortCharacters = maxCharacters - MAX_CHAR;
                parte1 = par1.Remove(MAX_CHAR, cortCharacters);          // si es mayor que 40 caracteres, lo corta
            }
            else { parte1 = par1; }                      // **********
            maxCharacters = (int)(MAX_CHAR - parte1.Length) / 2;         // saca la cantidad de espacios libres y divide entre dos
            for (int i = 0; i < maxCharacters; i++)                // **********
            {
                text += " ";                           // Agrega espacios antes del texto a centrar
            }                                            // **********
            text += parte1 + "\n";
           
            //RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void TextoExtremos(string par1, string par2)
        {
            maxCharacters = par1.Length;
            if (maxCharacters > 18)                                 // **********
            {
                cortCharacters = maxCharacters - 18;
                parte1 = par1.Remove(18, cortCharacters);          // si par1 es mayor que 18 lo corta
            }
            else { parte1 = par1; }                      // **********
            text += parte1;                             // agrega el primer parametro
            maxCharacters = par2.Length;
            if (maxCharacters > 18)                                 // **********
            {
                cortCharacters = maxCharacters - 18;
                parte2 = par2.Remove(18, cortCharacters);          // si par2 es mayor que 18 lo corta
            }
            else { parte2 = par2; }
            maxCharacters = MAX_CHAR - (parte1.Length + parte2.Length);
            for (int i = 0; i < maxCharacters; i++)                 // **********
            {
                text += " ";                            // Agrega espacios para poner par2 al final
            }                                             // **********
            text += parte2 + "\n";                     // agrega el segundo parametro al final
            //RawPrinterHelper.SendStringToPrinter(printerName, text); // imprime texto
        }
        public void CorteCStyle(string texto1, string texto2, string tipocambio = "")
        {
            string Texto = "";

            Texto = texto1;

            if (tipocambio.Equals(string.Empty))
            {
                for (int x = Texto.Length; x <= (MAX_CHAR - 8); x++)
                    Texto += " ";

                Texto = Texto + texto2;
            }
            else 
            {
                for (int x = Texto.Length; x <= (MAX_CHAR - 15); x++)
                    Texto += " ";

                Texto = Texto + tipocambio + "  " + texto2;
            }

            text +=  Texto + "\n";
           //RawPrinterHelper.SendStringToPrinter(printerName, Texto);
        
        }

        public void AgregaTotales(string Subtotal, string IVA, string Total)
        {
            const int EspAntesDosPuntos = 21;//=24
            const string subTotalText = "SUB-TOTAL";
            const string IvaText = "I.V.A";
            const string TotalText = "TOTAL A PAGAR";

            string Texto = "";

            //---------------------------------------------------------------------------------------------
            //SUB-TOTAL
            int temp;
            temp = ((EspAntesDosPuntos + 1) - subTotalText.Length);
            for (int x = 1; x <= temp; x++)
                Texto += " ";

            Texto += subTotalText;

            //for (int x = (subTotalText.ToString().Length + EspAntesDeTexto); x <= EspAntesDosPuntos; x++)
            //    Texto += " ";
            
            Texto += "  :";

            for (int w = EspAntesDosPuntos ; w <= (MAX_CHAR  - Subtotal.Length); w++)
                Texto += " ";

            Texto += Subtotal + "\n";
            //---------------------------------------------------------------------------------------------
            //IVA
            temp = ((EspAntesDosPuntos + 1) - IvaText.Length);
            for (int r = 1; r <= temp; r++)
                Texto += " ";
            
            Texto += IvaText;

            //for (int x = (IvaText.ToString().Length + EspAntesDeTexto ); x <= EspAntesDosPuntos; x++)
            //    Texto += " ";
            
            Texto += "  :";

            for (int g = EspAntesDosPuntos; g <= (MAX_CHAR - IVA.Length); g++)
                Texto += " ";
             
            Texto += IVA + "\n";
            //---------------------------------------------------------------------------------------------
            //TOTAL
            temp = ((EspAntesDosPuntos + 1) - TotalText.Length);
            for (int r = 1; r <= temp; r++)
                Texto += " ";
            
            Texto += TotalText;

            //for (int x = (TotalText.ToString().Length + EspAntesDeTexto); x <= EspAntesDosPuntos; x++)
            //   Texto += " ";
            
            Texto += "  :";

            for (int h = EspAntesDosPuntos; h <= (MAX_CHAR - Total.Length); h++)
                Texto += " ";
             
            Texto += Total + "\n\n";
            //---------------------------------------------------------------------------------------------
//            RawPrinterHelper.SendStringToPrinter(printerName, Texto);
            text = text + Texto;
        }
       
        public void AgregaArticulo(string Alimentos, string Bebidas, string Extras)
        {
            const int EspAntesDosPuntos = 21;//=24
            const string AlimentosText = " ALIMENTOS";
            const string BebidasText = " BEBIDAS";
            const string ExtrasText = " EXTRAS";

            string Texto = "";

            int Lenght;
            
            //---------------------------------------------------------------------------------------------
            //ALIMENTOS
            Texto = AlimentosText;
            for (int x = AlimentosText.Length; x <= EspAntesDosPuntos + 2; x++)
                Texto += " ";

            Texto += ":";

            for (int x = (EspAntesDosPuntos + 1); x <= (MAX_CHAR - Alimentos.Length)+1; x++)
                Texto += " ";

            Texto += Alimentos + "\n";
            //---------------------------------------------------------------------------------------------
            //BEBIDAS
            Texto += BebidasText;
            
            for (int x = BebidasText.Length; x <= EspAntesDosPuntos +2; x++)
                Texto += " ";

            Texto += ":";

            for (int x = (EspAntesDosPuntos + 1); x <= (MAX_CHAR - Bebidas.Length)+1; x++)
                Texto += " ";

            Texto += Bebidas + "\n";
            //---------------------------------------------------------------------------------------------
            //Extras
            Texto += ExtrasText;

            for (int x = ExtrasText.Length; x <= EspAntesDosPuntos +2; x++)
                Texto += " ";

            Texto += ":";

            for (int x = (EspAntesDosPuntos + 1); x <= (MAX_CHAR - Extras.Length)+1; x++)
                Texto += " ";

            Texto += Extras + "\n\n";
            //---------------------------------------------------------------------------------------------
          //  RawPrinterHelper.SendStringToPrinter(printerName, Texto);
            text = text + Texto;
        }

        public string AgregaArticuloDetallado(string Texto, string precioTotal)
        {
            const int EspAntesDosPuntos = 21;//=24
            
            for (int x = Texto.Length; x <= EspAntesDosPuntos + 2; x++)
                Texto += " ";

            Texto += ":";

            for (int x = (EspAntesDosPuntos + 1); x <= (MAX_CHAR - precioTotal.Length) + 1; x++)
                Texto += " ";

            Texto += precioTotal + "\n";

            text = text + Texto;
            return text;
        }

        public void ImprimeFolioZ(string Texto)
        {
            RawPrinterHelper.SendStringToPrinter(printerName, "\x1B\x40");
            RawPrinterHelper.SendStringToPrinter(printerName, text);
            text = "";
        }

        public void PRINTEST()
        {
            RawPrinterHelper.SendStringToPrinter(printerName, "\x1B\x40" + "\x1B\x45\x01" + "Line is printed with EMPHASIZE ON.\n" + "\x1B\x45\x02" + "Line is printed with EMPHASIZE OFF.\n");

            //RawPrinterHelper.SendStringToPrinter(printerName,"\x1B\x40");	// Initialize printer
            //RawPrinterHelper.SendStringToPrinter(printerName,"\x1B\x45\x01");	// Emphasize on
            //RawPrinterHelper.SendStringToPrinter(printerName,"Line is printed with EMPHASIZE ON.\n");
            //RawPrinterHelper.SendStringToPrinter(printerName,"\x1B\x45\x02");	// Emphasize off
            //RawPrinterHelper.SendStringToPrinter(printerName,"Line is printed with EMPHASIZE OFF.\n");
            //RawPrinterHelper.SendStringToPrinter(printerName, "\x1B\x74\x01");
            //     RawPrinterHelper.SendStringToPrinter(printerName,"Letra\n");
            //     RawPrinterHelper.SendStringToPrinter(printerName, "\x1B\x74\x00");
                 RawPrinterHelper.SendStringToPrinter(printerName, "Letra2\n");
          //  RawPrinterHelper.SendStringToPrinter(printerName, "\x1Bd\x09");
          //  RawPrinterHelper.SendStringToPrinter(printerName, "\x1Bm");
        }
        
        public void CortaTicket()
        {
            string corte = "\x1B" + "m";                  // caracteres de corte
            string avance = "\x1B" + "d" + "\x09";        // avanza 9 renglones
            RawPrinterHelper.SendStringToPrinter(printerName, avance); // avanza
            RawPrinterHelper.SendStringToPrinter(printerName, corte); // corta
        }
        public void AbreCajon(byte number)
        {
			string cajon = "\x1B" + "p" + "\x0" + number + "\x0F" + "\x96";  // caracteres de apertura cajon 
            RawPrinterHelper.SendStringToPrinter(printerName, cajon); // abre cajon
        }
    
    }
}